Publisher
roscd tutorial/ # 進入 tutorial package
cd src # 進入 src
touch hello_publisher.py # 創建 hello_publisher.py 檔案
撰寫
#! /usr/bin/env python
# 指定直譯器
# 1. import
import rospy
from std_msgs.msg import String
# 2. 編寫 main
if __name__ == "__main__":
# 3. 建立 Publisher 前要先建立一個 Node
## 初始化 ROS 節點
rospy.init_node("publish", anonymous = True) # 建立一個 Node 要先給名稱
# 4. 建立一個 Publisher
pub = rospy.Publisher("chat", String, queue_size = 10) # 必須寫出 Topic 的名稱叫什麼
# 5. 連續發送訊息
rate = rospy.Rate(10) # 以 10Hz 的頻率發送訊息
# 6. 進入迴圈,如果沒有按下 ctrl+c 就一直執行
while not rospy.is_shutdown():
hello = 'hello world ! %s' % rospy.get_time() # 一直傳送的訊息
pub.publish(hello) # 發送訊息,目前螢幕上還看不到
# 7. 輸出
rospy.loginfo(hello)
rate.sleep()
更改權限並執行
roscd tutorial/ # 進入 tutorial package
cd src # 進入 src
chmod +x hello_publisher.py # 更改 hello_publisher.py 的權限變成可執行檔
rosrun tutorial hello_publisher.py # 執行 hello_publisher.py 檔案
Subscriber
roscd tutorial/ # 進入 tutorial package
cd src # 進入 src
touch hello_subscriber.py # 創建 hello_subscriber.py 檔案
撰寫
#! /usr/bin/env python
# 指定直譯器
# 1. import
import rospy
from std_msgs.msg import String
# 6. callback 函數
def callback(data):
# 把接收到的訊息顯示在螢幕上
rospt.loginfo(rospy.get_caler_id() + 'I heard %s' % data.data)
# 2. 編寫 main
if __name__ == "__main__":
# 3. 建立 Subsciber 前要先建立一個 Node
# 初始化 ROS 節點
rospy.init_node("Subsciber", anonymous = True) # 建立一個 Node 要先給名稱
# 4. 建立一個 Subscriber
rospy.Subscriber("chat", String, callback)
# 必須寫出訂閱了什麼 Topic
# 我們必須寫出 Subscriber 如果接收到訊息要做出什麼樣的反應(callback 函數)
# 5. 防止程式結束
rospy.spin()
更改權限並執行
roscd tutorial/ # 進入 tutorial package
cd src # 進入 src
chmod +x hello_publisher.py # 更改 hello_publisher.py 的權限變成可執行檔
rosrun tutorial hello_publisher.py # 執行 hello_publisher.py 檔案
Reference
AI葵 ROS教學